package com.sh.动态规划;

/**
 * @Auther: sh
 * @Version 1.0
 * @Description:
 */
public class 斐波那契数 {
    public static void main(String[] args) {
        fib1(7);

    }
    // 脑子不转  直接递归
    public int fib(int n) {
        if (n==0) return 0;
        if (n==1) return 1;
        return fib(n-1) + fib(n-2);
    }


    /**
     * 动态规划解决
     * @param n
     * @return
     */
    public static int fib1(int n) {
        if (n==0 ){
            return 0;
        }
        if (n==1){
            return 1;
        }
        // 数组：里面存的是每一个斐波那契数      下标：第几个斐波那契数
        int[] ints = new int[n+1];
        ints[0] = 0;
        ints[1] = 1;
        for (int i = 2; i <= n; i++) {
            ints[i] = ints[i-1] + ints[i-2];
        }
        for (int anInt : ints) {
            System.out.print(anInt + "\t");
        }
        return ints[n];
    }

    /**
     * 动态规划解决  进阶版  不维护整个数组
     * @param n
     * @return
     */
    public static int fib2(int n) {
        if (n==0 ){
            return 0;
        }
        if (n==1){
            return 1;
        }
        // 数组：里面存的是每一个斐波那契数      下标：第几个斐波那契数
        int[] ints = new int[2];
        ints[0] = 0;
        ints[1] = 1;
        int sum = 0;
        for (int i = 2; i <= n; i++) {
            sum = ints[0] + ints[1];
            System.out.print(sum + "\t");
            ints[0] = ints[1];
            ints[1] = sum;
        }
        return sum;
    }
}

